Videoconferencing with Reduced Quality Interruptions Upon Participant Join

ABSTRACT

In an embodiment, a computing system can include one or more processors and one or more non-transitory computer-readable media that store instructions that, when executed by the one or more processors, cause the computing system to perform operations. The operations can include: receiving an internal encoder state of an encoder running on a first computing device being used to participate in a video conference currently in progress; receiving data indicative of a second computing device being used to join the video conference; compressing, based at least in part on receipt of the data, the internal encoder state to generate a compressed internal encoder state of the encoder; and/or transmitting the compressed internal encoder state to the second computing device to synchronize the internal encoder state of the encoder running on the first computing device with an internal decoder state of a decoder running on the second computing device.

FIELD

The present disclosure relates generally to multi-attendee videoconference systems. More particularly, the present disclosure relates tolossless transfer of an internal codec state in a video conferencingsystem to facilitate reduced interruptions in quality due to joining ofadditional participant(s).

BACKGROUND

Video conference technologies, sometimes alternatively referred to asvideo teleconference or videotelephony, include technologies for thereception and transmission of audio and/or visual signals by users indifferent locations, for communication between people in real time.

In certain existing video conference systems, when a joining computingdevice joins a video conference that is in progress, a “key frame” isgenerated by the video encoder running on each participating computingdevice that is already participating in the video conference at the timethe joining computing device joins. Each participating computing devicethen sends its key frame to the joining computing device to synchronizethe video decoder running on the joining computing device with eachvideo encoder running on each participating computing device.

A problem with using a key frame to synchronize the internal encoderstate with the internal decoder state is that key frames involverelatively high computational costs (e.g., relatively high bandwidthcosts). Another problem with key frames is that they cause a period oflower video quality and/or delay that is visible to and/or experiencedby all participants of the video conference, including the newly joinedparticipant (i.e., all the participating computing devices and thejoining computing device). Consequently, the use of key frames scalespoorly and generates a degradation in quality (e.g., visual resolution)among participants each time a new participant joins the conference.

SUMMARY

Aspects and advantages of embodiments of the present disclosure will beset forth in part in the following description, or can be learned fromthe description, or can be learned through practice of the embodiments.

According to one example embodiment, a computer-implemented method oftransferring an internal codec state in a video conference system caninclude maintaining, by a first computing device operatively coupled toone or more processors, an internal encoder state of an encoder runningon the first computing device. The first computing device being used toparticipate in a video conference currently in progress. Thecomputer-implemented method can further include receiving, by the firstcomputing device, data indicative of a second computing device beingused to join the video conference. The computer-implemented method canfurther include compressing, by the first computing device, based atleast in part on receipt of the data, the internal encoder state togenerate a compressed internal encoder state of the encoder. Thecomputer-implemented method can further include transmitting, by thefirst computing device, the compressed internal encoder state to thesecond computing device to synchronize the internal encoder state of theencoder running on the first computing device with an internal decoderstate of a decoder running on the second computing device.

According to another example embodiment, a computer-implemented methodof transferring an internal codec state in a video conference system caninclude receiving, by a first computing device operatively coupled toone or more processors, an internal encoder state of an encoder runningon a second computing device being used to participate in a videoconference currently in progress. The computer-implemented method canfurther include receiving, by the first computing device, dataindicative of a third computing device being used to join the videoconference. The computer-implemented method can further includecompressing, by the first computing device, based at least in part onreceipt of the data, the internal encoder state to generate a compressedinternal encoder state of the encoder. The computer-implemented methodcan further include transmitting, by the first computing device, thecompressed internal encoder state to the third computing device tosynchronize the internal encoder state of the encoder running on thesecond computing device with an internal decoder state of a decoderrunning on the third computing device.

According to another example embodiment, a computing system can includeone or more processors. The computing system can further include one ormore non-transitory computer-readable media that store instructionsthat, when executed by the one or more processors, cause the computingsystem to perform operations. The operations can include receiving aninternal encoder state of an encoder running on a first computing devicebeing used to participate in a video conference currently in progress.The operations can further include receiving data indicative of a secondcomputing device being used to join the video conference. The operationscan further include compressing, based at least in part on receipt ofthe data, the internal encoder state to generate a compressed internalencoder state of the encoder. The operations can further includetransmitting the compressed internal encoder state to the secondcomputing device to synchronize the internal encoder state of theencoder running on the first computing device with an internal decoderstate of a decoder running on the second computing device.

These and other features, aspects, and advantages of various embodimentsof the present disclosure will become better understood with referenceto the following description and appended claims. The accompanyingdrawings, which are incorporated in and constitute a part of thisspecification, illustrate example embodiments of the present disclosureand, together with the description, serve to explain the relatedprinciples.

BRIEF DESCRIPTION OF THE DRAWINGS

Detailed discussion of embodiments directed to one of ordinary skill inthe art is set forth in the specification, which makes reference to theappended figures, in which:

FIG. 1 illustrates a block diagram of an example, non-limiting videoconference environment according to one or more example embodiments ofthe present disclosure; and

FIGS. 2-7 each illustrate a flow diagram of an example, non-limitingcomputer-implemented method according to one or more example embodimentsof the present disclosure.

Repeated use of reference characters and/or numerals in the presentspecification and/or figures is intended to represent the same oranalogous features, elements, or operations of the present disclosure.Repeated description of reference characters and/or numerals that arerepeated in the present specification is omitted for brevity.

DETAILED DESCRIPTION Overview

As referred to herein, the terms “includes” and “including” are intendedto be inclusive in a manner similar to the term “comprising.” Asreferenced herein, the terms “or” and “and/or” are generally intended tobe inclusive, that is (i.e.), “A or B” or “A and/or B” are each intendedto mean “A or B or both.” As referred to herein, the terms “first,”“second,” “third,” and so on, can be used interchangeably to distinguishone component or entity from another and are not intended to signifylocation, functionality, or importance of the individual components orentities. As referenced herein, the terms “couple,” “couples,”“coupled,” and/or “coupling” refer to chemical coupling (e.g., chemicalbonding), communicative coupling, electrical and/or electromagneticcoupling (e.g., capacitive coupling, inductive coupling, direct and/orconnected coupling, etc.), mechanical coupling, operative coupling,optical coupling, and/or physical coupling.

Example aspects of the present disclosure are directed to: the losslesscompression of an internal encoder state of a video encoder running on acomputing device being used to participate in a video conference(hereinafter, “participating computing device”); and the transfer of thecompressed internal encoder state to a computing device being used tojoin the video conference (hereinafter, “joining computing device”) tosynchronize an internal decoder state of a video decoder running on thejoining computing device with the internal encoder state of the videoencoder running on the participating computing device. In exampleembodiments of the present disclosure, the internal encoder state ofeach video encoder running on each participating computing device in avideo conference can be compressed using, for instance, a losslesscompression process and sent to a joining computing device tosynchronize an internal decoder state of a video decoder running on thejoining computing device with the internal encoder state of each videoencoder running on each participating computing device.

In certain existing video conference systems, when a joining computingdevice joins a video conference that is in progress, a “key frame” isgenerated by the video encoder running on each participating computingdevice that is already participating in the video conference at the timethe joining computing device joins. Each participating computing devicethen sends its key frame to the joining computing device to synchronizethe video decoder running on the joining computing device with eachvideo encoder running on each participating computing device. Ensuringsuch synchronization occurs is critical for video coding since everysubsequent video frame depends on the internal decoder state of thevideo decoder being the same as the internal encoder state of the videoencoder when the video frame is generated and/or compressed.

A problem with using a key frame to synchronize the internal encoderstate with the internal decoder state is that key frames involverelatively high computational costs (e.g., relatively high bandwidthcosts). Another problem with key frames is that they cause a period oflower video quality and/or delay that is visible to and/or experiencedby all participants of the video conference, including the newly joinedparticipant (i.e., all the participating computing devices and thejoining computing device). Consequently, the use of key frames scalespoorly. Alternatively, some existing video conference systems use a“cyclic intra coding” process to spread the key frame out over multipleframes (e.g., by providing a portion of the key frame with a currentframe (e.g., a current “delta” frame) over multiple current frames(e.g., over multiple current delta frames) until all portions of the keyframe have been provided). As referenced herein, a “delta” frame candescribe one or more portions of a video frame and/or statistical datacorresponding thereto that is different from and/or more current (e.g.,newer) compared to that included in an existing and/or current internalencoder and/or decoder state. A problem with the above-described cyclicintra coding process is that it primarily only reduces the delay invideo involved with the above-described key frame process.

According to one or more example embodiments of the present disclosure,a computing device such as, for instance, a client computing device, acomputer, a laptop, a smartphone, a tablet, a wearable computing deviceand/or another computing device described herein can facilitate losslesscompression and transfer of an internal codec state (e.g., an internalencoder state, internal decoder state) in a video conference system. Forexample, in these one or more embodiments, the computing device canconstitute a participating computing device that is being used toparticipate in a video conference that is in progress when a differentcomputing device that can constitute a joining computing device is usedto join the video conference. In these one or more embodiments, when thejoining computing device joins the video conference, the participatingcomputing device can perform a lossless compression process to compressan internal encoder state (e.g., an existing and/or most currentinternal encoder state) of a video encoder running on the participatingcomputing device and transfer of the compressed internal encoder stateto the joining computing device to synchronize an internal decoder stateof a video decoder running on the joining computing device with theinternal encoder state of the video encoder running on the participatingcomputing device.

In at least one embodiment of the present disclosure, to facilitate suchlossless compression and transfer of the internal encoder state of thevideo encoder, the participating computing device can perform operationsthat can include, but are not limited to: maintaining the internalencoder state of the video encoder running on the participatingcomputing device; receiving data indicative of the joining computingdevice being used to join the video conference; compressing, based atleast in part on (e.g., in response to) receipt of the data, theinternal encoder state (e.g., the existing and/or most current internalencoder state) to generate a compressed internal encoder state of thevideo encoder; and transmitting the compressed internal encoder state tothe joining computing device to synchronize the internal encoder stateof the video encoder running on the participating computing device withan internal decoder state of a video decoder running on the joiningcomputing device.

In accordance with one or more other embodiments described herein, acomputing device such as for instance, a server, a host server, abackend server, and/or another computing device described herein canfacilitate lossless compression and transfer of an internal codec state(e.g., an internal encoder state, internal decoder state) in a videoconference system. For example, in these one or more embodiments, thecomputing device can constitute a computing device that is being used toimplement and/or conduct a video conference (hereinafter, “hostingcomputing device”) that is in progress and includes at least oneparticipating computing device when a joining computing device is usedto join the video conference. In these one or more embodiments, when thejoining computing device joins the video conference, the hostingcomputing device can perform a lossless compression process to compressan internal encoder state of a video encoder (e.g., an existing and/ormost current internal encoder state) running on the participatingcomputing device and transfer of the compressed internal encoder stateto the joining computing device to synchronize an internal decoder stateof a video decoder running on the joining computing device with theinternal encoder state of the video encoder running on the participatingcomputing device.

In at least one embodiment of the present disclosure, to facilitate suchlossless compression and transfer of the internal encoder state, thehosting computing device can perform operations that can include, butare not limited to: receiving the internal encoder state (e.g., theexisting and/or most current internal encoder state) of a video encoderrunning on the participating computing device; receiving data indicativeof the joining computing device being used to join the video conference(e.g., the hosting computing device can receive a request from thejoining computing device to join the video conference); compressing,based at least in part on (e.g., in response to) receipt of the data,the internal encoder state to generate a compressed internal encoderstate of the video encoder; and transmitting the compressed internalencoder state to the joining computing device to synchronize theinternal encoder state of the video encoder running on the participatingcomputing device with an internal decoder state of a video decoderrunning on the joining computing device.

In some embodiments of the present disclosure, a computing system caninclude the above-described computing device(s). For example, acomputing system according to example embodiments described herein canconstitute a video conference system that can include theabove-described hosting computing device (e.g., a server, host server),participating computing device (e.g., a first client computing device,computer, laptop, smartphone, tablet, wearable computing device), and/orjoining computing device (e.g., a second client computing device,computer, laptop, smartphone, tablet, wearable computing device).

To perform the operations described above and/or other operationsdescribed herein in accordance with one or more embodiments, each of theabove-described computing devices and/or the computing system caninclude, be coupled to (e.g., communicatively, operatively), and/orotherwise be associated with one or more processors and/or one or morenon-transitory computer-readable storage media. In these or otherembodiments, the one or more non-transitory computer-readable storagemedia can store instructions that, when executed by the one or moreprocessors, can cause each of the computing devices and/or the computingsystem (e.g., via the one or more processors) to perform the operationsdescribed above and/or other operations described herein to facilitatelossless compression and transfer of the internal codec state (e.g., theinternal encoder state, the internal decoder state).

According to one or more embodiments of the present disclosure, theinternal encoder state and/or internal decoder state can each constitutea memory (e.g., a random-access memory (RAM)) of the encoder and/ordecoder, respectively. In some embodiments, the internal encoder stateand/or internal decoder state can each include one or more portions ofone or more reference frames (e.g., previously processed frames, alsoreferred to as “frame buffers” or “reference buffers”) of video data(e.g., a video, video stream, byte stream) associated with the videoconference. For example, the internal encoder state and/or internaldecoder state can each include static portion(s) and/or other portion(s)of previously processed frame(s) of video captured by one or morecomputing devices in the video conference. In additional or alternativeembodiments, the internal encoder state and/or internal decoder statecan each include statistical data (e.g., pixel data, histogram data)corresponding to the above-described one or more portions of the one ormore reference frames and/or the one or more reference framesthemselves. As such, in at least one embodiment, the compressed internalencoder state can include: one or more compressed portions of the one ormore reference frames of the video data associated with the videoconference; and/or compressed statistical data corresponding to the oneor more compressed portions of the one or more reference frames and/orthe one or more reference frames themselves.

In one or more embodiments described herein, based at least in part on(e.g., in response to) receiving data indicating that the joiningcomputing device wants to join (e.g., a request to join), is joining,and/or has joined the video conference, the participating computingdevice and/or the hosting computing device can compress the internalencoder state of the video encoder to generate the compressed internalencoder state of the video encoder by using a compression algorithmhaving a lossless compression mode and/or a near lossless compressionmode. For example, in these one or more embodiments, based at least inpart on (e.g., in response to) receiving such data about the joiningcomputing device joining the video conference, the participatingcomputing device and/or the hosting computing device can compress theinternal encoder state of the video encoder using such a compressionalgorithm set in the lossless compression mode or the near losslesscompression mode such that compression of the internal encoder stateconstitutes and/or yields a lossless compression or a near losslesscompression, respectively, of the internal encoder state.

Although example embodiments described herein are directed to losslessor near lossless compression of an interna encoder state of a videoencoder(s) running on a participating computing device(s), the presentdisclosure is not so limiting. For example, in one embodiment, theparticipating computing device and/or the hosting computing device canuse a compression algorithm having a lossy compression mode. In thisembodiment, based at least in part on (e.g., in response to) receivingthe data about the joining computing device joining the videoconference, the participating computing device and/or the hostingcomputing device can compress the internal encoder state of the videoencoder using such a compression algorithm set in the lossy compressionmode such that compression of the internal encoder state constitutesand/or yields a lossy compression of the internal encoder state.

In the above-described embodiment, using a lossy compressed internalencoder state to synchronize (e.g., via the joining computing device)the internal decoder state of the video decoder running on the joiningcomputing device with the internal encoder state of the video encoderrunning on the participating computing device would result in a partialor incomplete synchronization of the internal decoder state with theinternal encoder state. In this embodiment, such partial or incompletesynchronization of the internal decoder state with the internal encoderstate could cause errors that result in degradation of the video data(e.g., degradation of the video stream of the video conference).However, in some embodiments, combining (e.g., via the participatingcomputing device, the hosting computing device, and/or the joiningcomputing device) such use of a lossy compressed internal encoder statewith one or more other processes such as, for example, a periodic intrarefresh process could negate (e.g., eliminate) such errors over timesuch that the internal encoder state and the internal decoder statecould converge into a synchronized state.

In at least one embodiment of the present disclosure, the participatingcomputing device and/or the hosting computing device can transmit acurrent delta frame of video data associated with the video conferenceto the joining computing device. For example, in this or anotherembodiment, the participating computing device and/or the hostingcomputing device can send the joining computing device the current deltaframe of the video of the video conference at a time the joiningcomputing device is used to join the video conference (e.g., at the timethe joining computing device requests entry into the video conferenceand/or at the time the joining computing device joins the videoconference).

In one or more embodiments, the participating computing device and/orthe hosting computing device can send the current delta frame of thevideo data (e.g., the current delta frame of the video of the videoconference) to the joining computing device along with the compressedinternal encoder state of the video encoder running on the participatingcomputing device. In these one or more embodiments, the participatingcomputing device and/or the hosting computing device can also transmitan instruction to the joining computing device instructing the joiningcomputing device to use the compressed internal encoder state and/or thecurrent delta frame of the video data to update the internal decoderstate of the video decoder running on the joining computing device tosynchronize the internal encoder state of the video encoder with theinternal decoder state of the video decoder.

In at least one embodiment described herein, the participating computingdevice and/or the hosting computing device can instruct the joiningcomputing device to store the compressed internal encoder state and/orthe current delta frame of the video data in the memory (e.g., RAM) ofthe video decoder running on the joining computing device such that thecompressed internal encoder state and/or the current delta frameconstitute and/or serve as the internal decoder state of the videodecoder. In this or another embodiment, once the joining computingdevice has stored the compressed internal encoder state and/or thecurrent delta frame in the memory of the video decoder such that thecompressed internal encoder state and/or the current delta frameconstitute and/or serve as the internal decoder state of the videodecoder, the internal encoder state of the video encoder running on theparticipating computing device will be synchronized with the internaldecoder state of the video decoder running on the joining computingdevice.

In at least one embodiment of the present disclosure, the participatingcomputing device and/or the hosting computing device can generate one ormore delta frames that can include one or more video data updatesassociated with the internal encoder state and/or the compressedinternal encoder state. For example, in this or another embodiment, theparticipating computing device and/or the hosting computing device cangenerate delta frame(s) having video data (e.g., portion(s) of videoframes and/or statistical data corresponding thereto) that is differentfrom and/or more current (e.g., newer) compared to the video dataincluded in the compressed internal encoder state. In some embodiments,the participating computing device can maintain the internal encoderstate of the video encoder running on the participating computing deviceby using such delta frame(s) and/or the video data thereof to update anexisting (e.g., current) internal encoder state of the video encoder.For example, in these or other embodiments, when such delta frame(s) aregenerated by the participating computing device and/or provided to theparticipating computing device by, for instance, the hosting computingdevice and/or another computing device participating in the videoconference, the participating computing device can replace an existing(e.g., current) internal encoder state of the video encoder with thedelta frame(s) and/or the video data thereof.

In some embodiments, the participating computing device and/or thehosting computing device can transmit the above-described delta frame(s)to the joining computing device based at least in part on (e.g., inresponse to) synchronization of the internal encoder state of the videoencoder with the internal decoder state of the video decoder. Forinstance, in these or other embodiments, after synchronization of theinternal encoder state of the video encoder with the internal decoderstate of the video decoder as described above, the participatingcomputing device and/or the hosting computing device can transmit suchdelta frame(s) to the joining computing device along with an instructionthat instructs the joining computing device to use the delta frame(s) toupdate the internal decoder state of the video decoder such that thedelta frame(s) and/or the video data thereof constitute and/or serve asthe internal decoder state of the video decoder. For example, in theseor other embodiments, the participating computing device and/or thehosting computing device can transmit such delta frame(s) to the joiningcomputing device along with an instruction that instructs the joiningcomputing device to replace the compressed internal encoder state storedin the memory of the video decoder with the delta frame(s) such that thedelta frame(s) and/or the video data thereof constitute and/or serve asthe internal decoder state of the video decoder. In these or otherembodiments, once the joining computing device has used the deltaframe(s) to update the internal decoder state (e.g., the memory) of thevideo decoder such that the delta frame(s) and/or the video data thereofconstitute and/or serve as the internal decoder state of the videodecoder, the internal encoder state of the video encoder running on theparticipating computing device will once again be synchronized with theinternal decoder state of the video decoder running on the joiningcomputing device.

In some embodiments, the participating computing device and/or thehosting computing device can implement the above-described lossless ornear lossless compression process to compress one or more portions ofthe internal encoder state. For example, in these embodiments, theparticipating computing device and/or the hosting computing device cancompress a certain percentage (%) of internal frame reference buffers(e.g., internal reference frames) of the internal encoder state. Forinstance, in some embodiments, the participating computing device and/orthe hosting computing device can compress 1 out of 4 internal framereference buffers (e.g., 1 out of every 4, 25%), as well as one or moreprobability contexts (e.g., statistical data corresponding to such 1 outof every 4 internal frame reference buffers) and/or other state datawhich can be relatively smaller in size compared to the internal framereference buffers. In some embodiments, the percentage of internal framereference buffers that can be compressed by the participating computingdevice and/or the hosting computing device can vary depending on thecodec system(s) running on the participating computing device, thehosting computing device, and/or the joining computing device (e.g., thepercentage can vary depending on the type(s) of code system(s) runningon such device(s)).

In the above embodiments, based at least in part on (e.g., in responseto) compression of such portion(s) of the internal encoder state (e.g.,compression of 1 out of every 4 internal frame reference buffers), theparticipating computing device and/or the hosting computing device cantransmit the compressed portion(s) of the internal encoder state to thejoining computing device to synchronize (e.g., by the joining computingdevice) the internal decoder state of the video decoder running on thejoining computing device with the internal encoder state running on theparticipating computing device. In these embodiments, based onsynchronization (e.g., by the joining computing device) of the internaldecoder state with the internal encoder state using such compressedportion(s) of the internal encoder state, the participating computingdevice and/or the hosting computing device can send the joiningcomputing device a following delta frame as described above (e.g., asubsequent delta frame). In these embodiments, such a delta frame can beused to predict (e.g., via the video encoder, video decoder) from onlythe frame buffer that has been synchronized (e.g., the 1 out of the 4described above) and can further be used to update (e.g., via the videoencoder, video decoder) all the remaining internal frame referencebuffers (e.g., the other 3 out of the 4 described above) with the resultof the decoded delta frame. In these embodiments, upon completion ofsuch an operation, all 4 internal frame reference buffers will besynchronized. It should be appreciated that the above-describedsynchronization process using compressed portion(s) of the internalencoder state can be computationally less expensive than transferringthe full state, while achieving approximately the same result.

In one or more embodiments where the hosting computing device isconducting (e.g., implementing, hosting) the video conference, thehosting computing device can receive data indicative of the joiningcomputing device being used to join the video conference (e.g., thehosting computing device can receive a request from the joiningcomputing device to join the video conference). In these one or moreembodiments, based at least in part on (e.g., in response to) receivingsuch data, the hosting computing device can receive multiple internalencoder states of a plurality of video encoders respectively running onmultiple participating computing devices being used to participate inthe video conference at the time the joining computing device is used tojoin the video conference. In these one or more embodiments, the hostingcomputing device can compress the multiple internal encoder states togenerate a plurality of compressed internal encoder states respectivelycorresponding to the plurality of video encoders. In these one or moreembodiments, the hosting computing device can further transmit theplurality of compressed internal encoder states and/or current deltaframes of the multiple participating computing devices to the joiningcomputing device to synchronize (e.g., as described above) the multipleinternal encoder states of the plurality of video encoders respectivelyrunning on the multiple participating computing devices with theinternal decoder state of the video decoder running on the joiningcomputing device.

In one embodiment where the hosting computing device is conducting(e.g., implementing, hosting) the video conference, the hostingcomputing device can instruct the joining computing device to store theplurality of compressed internal encoder states and/or the current deltaframes of the multiple participating computing devices in the memory(e.g., RAM) of the video decoder running on the joining computing devicesuch that the plurality of compressed internal encoder states and/or thecurrent delta frames constitute and/or serve as the internal decoderstate of the video decoder. In this or another embodiment, once thejoining computing device has stored the plurality of compressed internalencoder states and/or the current delta frames of the multipleparticipating computing devices in the memory of the video decoder suchthat the plurality of compressed internal encoder states and/or thecurrent delta frames constitute and/or serve as the internal decoderstate of the video decoder, the multiple internal encoder states of theplurality of video encoders respectively running on the multipleparticipating computing devices will be synchronized with the internaldecoder state of the video decoder running on the joining computingdevice. In this or another embodiment, based at least in part on (e.g.,in response to) such synchronization of the multiple internal encoderstates with the internal decoder state, the hosting computing device cangenerate the above-described delta frame(s) for each of the multipleparticipating computing devices (e.g., for each video encoderrespectively running on the multiple participating computing devicesand/or with respect to each internal encoder state of each videoencoder).

In at least one embodiment where the hosting computing device isconducting (e.g., implementing, hosting) the video conference, thehosting computing device can transmit (e.g., periodically during thevideo conference) such delta frame(s) to the joining computing devicealong with an instruction that instructs the joining computing device touse the delta frame(s) to update (e.g., as described above) the internaldecoder state of the video decoder such that the delta frame(s) and/orthe video data thereof constitute and/or serve as the internal decoderstate of the video decoder. In this or another embodiment, once thejoining computing device has used such delta frame(s) to update theinternal decoder state (e.g., the memory) of the video decoder such thatthe delta frame(s) and/or the video data thereof constitute and/or serveas the internal decoder state of the video decoder, the multipleinternal encoder states of the plurality of video encoders respectivelyrunning on the multiple participating computing devices will once againbe synchronized with the internal decoder state of the video decoderrunning on the joining computing device.

In one or more embodiments of the present disclosure, the participatingcomputing device, the joining computing device, and the hostingcomputing device can communicate and/or transfer data with one anotherusing a network such as, for example, a local area network (LAN), awireless and/or wired network, a wide area network (WAN), and/or anothernetwork. In one embodiment, the participating computing device cantransmit the above-described internal encoder state of the video encoderrunning on the participating computing device to the hosting computingdevice by using such a network described above (e.g., LAN, WAN,wireless, wired). In another embodiment, the participating computingdevice and/or the hosting computing device can transmit theabove-described compressed internal encoder state, current delta frameof video data, instruction, and/or delta frame(s) to the joiningcomputing device by using such a network described above (e.g., LAN,WAN, wireless, wired).

Example aspects of the present disclosure provide several technicaleffects, benefits, and/or improvements in computing technology. Forinstance, in example embodiments, when a joining computing device joinsa video conference that is in progress, the existing and/or most currentinternal encoder state of a video encoder running on each participatingcomputing device can be compressed and transmitted only to the joiningcomputing device to synchronize a video decoder running on the joiningcomputing device with the video encoder running on each participatingcomputing device. In these or other embodiments, video decoders runningon the participating computing device(s) being used to participate inthe video conference when the joining computing device joins wouldalready have the existing and/or most current internal encoder states ofthe video encoders running on the participating computing device(s), assuch existing and/or most current internal encoder states would havebeen used to synchronize the internal states of all such video encodersand video decoders before the joining computing device joins the videoconference.

Therefore, the disclosed technology according to example embodimentsdescribed herein can eliminate the operation of providing video dataupdates in the form of a key frame to the participating computingdevice(s) already participating in the video conference at the time thejoining computing device joins. Instead, the disclosed technologyaccording to example embodiments described herein can facilitatelossless or near lossless compression of the existing and/or mostcurrent internal encoder state of the video encoder running on eachparticipating computing device and transmit the compressed internalencoder state only to the joining computing device to synchronize onlythe video decoder running on the joining computing device with the videoencoder running on each participating computing device.

Accordingly, by eliminating the operation of providing video dataupdates in the form of a key frame to all participating computingdevice(s) already participating in the video conference when a joiningcomputing device joins, the disclosed technology according to exampleembodiments described herein can thereby eliminate computational and/orbandwidth costs, as well as reduce latency (e.g., delayed video and/oraudio) associated with providing the key frame to all such participatingcomputing device(s) each time a joining computing device joins the videoconference. Additionally, or alternatively, by facilitating lossless ornear lossless compression of the existing and/or most current internalencoder state of the video encoder running on each participatingcomputing device and transmitting the compressed internal encoder stateonly to the joining computing device, the disclosed technology accordingto example embodiments described herein can thereby reduce computationaland/or bandwidth costs, as well as reduce latency (e.g., delayed videoand/or audio) associated with providing the compressed internal encoderstate to the joining computing device while maintaining the quality ofthe video data (e.g., without loss of video data quality).

Example Devices and Systems

FIG. 1 illustrates a block diagram of an example, non-limiting videoconference environment 100 according to one or more example embodimentsof the present disclosure. As illustrated in the example embodimentdepicted in FIG. 1 , video conference environment 100 can include one ormore participating computing devices 102, 104, 106, 110, a joiningcomputing device 140, and a hosting computing device 170 that can becoupled (e.g., communicatively, operatively) to one another through oneor more networks 190. Although four participating computing devices 102,104, 106, 110 and one joining computing device 140 are depicted in theexample embodiment depicted in FIG. 1 , any number of participatingand/or joining computing devices can be included in video conferenceenvironment 100 and coupled (e.g., communicatively, operatively) tohosting computing device 170 over network(s) 190.

In one or more embodiments of the present disclosure, participatingcomputing devices 102, 104, 106, 110 and/or joining computing device 140can each be, for example, a computer, a smartphone, a tablet, a laptop,a desktop computer, a wearable computing device (e.g., smart glasses),and/or any other computing device that can be configured such that itcan be used by a user to join and participate in a video conference. Asillustrated in the example embodiment depicted in FIG. 1 , participatingcomputing device 110 can include one or more processors 112, memory 114,an associated display device 124, an encoder 126 (e.g., a videoencoder), a decoder 128 (e.g., a video decoder), and/or a camera 130. Inthis or another embodiment, joining computing device 140 can include oneor more processors 142, memory 144, an associated display device 154, anencoder 156 (e.g., a video encoder), a decoder 158 (e.g., a videodecoder), and/or a camera 160.

In some embodiments, participating computing device 102, 104, and/or 106can each be the same type of computing device and/or include the samecomponents, structure, attributes, and/or functionality as that ofparticipating computing device 110. In some embodiments, participatingcomputing device 102, 104, and/or 106 can each be a different type ofcomputing device and/or include components, structure, attributes,and/or functionality that are different from that of participatingcomputing device 110. For purposes of clarity and brevity, participatingcomputing device 102, 104, and/or 106 according to example embodimentsdescribed herein, can each include one or more processors 112, memory114, an associated display device 124, an encoder 126 (e.g., a videoencoder), a decoder 128 (e.g., a video decoder), and/or a camera 130.

In one or more embodiments of the present disclosure, hosting computingdevice 170 can be, for example, a computer, a server, a host server,and/or any other computing device that can be configured such that itcan be used to implement and/or conduct a video conference. Asillustrated in the example embodiment depicted in FIG. 1 , hostingcomputing device 170 can include one or more processors 172, memory 174,and/or a video conference system 184.

As referenced herein, the term “system” can refer to hardware (e.g.,application specific hardware), computer logic that executes on ageneral-purpose processor (e.g., a central processing unit (CPU)),and/or some combination thereof. In some embodiments, a “system” (e.g.,video conference system 184) can be implemented in hardware, applicationspecific circuits, firmware, and/or software controlling ageneral-purpose processor. In some embodiments, a “system” (e.g., videoconference system 184) can be implemented as program code files storedon a storage device (e.g., memory 174), loaded into memory and executedby a processor (e.g., processor(s) 172), and/or can be provided fromcomputer program products, for example, computer-executable instructionsthat are stored in a tangible computer-readable storage medium (e.g.,memory 174, random-access memory (RAM), hard disk, optical media,magnetic media).

Processor(s) 112, processor(s) 142, and/or processor(s) 172, accordingto example embodiments described herein can each be a processing device.For example, in the example embodiment depicted in FIG. 1 , processor(s)112, processor(s) 142, and/or processor(s) 172 can each be a centralprocessing unit (CPU), microprocessor, microcontroller, integratedcircuit (e.g., an application specific integrated circuit (ASIC)),and/or another type of processing device.

In some embodiments, processor(s) 142 and/or processor(s) 172 can eachbe the same type of processor and/or include the same components,structure, attributes, and/or functionality as that of processor(s) 112.In some embodiments, processor(s) 142 and/or processor(s) 172 can eachbe a different type of processor and/or include components, structure,attributes, and/or functionality that are different from that ofprocessor(s) 112.

Memory 114, memory 144, and/or memory 174 according to exampleembodiments described herein can each store computer-readable and/orcomputer executable entities (e.g., data, information, applications,models, algorithms, etc.) that can be created, modified, accessed, read,retrieved, and/or executed by processor(s) 112, processor(s) 142, and/orprocessor(s) 172, respectively. In some embodiments, memory 114, memory144, and/or memory 174 can each include a computing system and/or mediasuch as, for example, one or more non-transitory computer-readablemedia, volatile memory, non-volatile memory, random-access memory (RAM),read only memory (ROM), hard drives, flash drives, and/or other memorydevices.

In the example embodiment depicted in FIG. 1 , memory 114 can includedata 116 (e.g., structured data, unstructured data, application specificdata), instructions 118, video conference application 120, and/orcompression algorithm 122. In this embodiment, memory 144 can includedata 146 (e.g., structured data, unstructured data, application specificdata), instructions 148, video conference application 150, and/orcompression algorithm 152. In this embodiment, memory 174 can includedata 176 (e.g., structured data, unstructured data, application specificdata), instructions 178, video conference application 180, and/orcompression algorithm 182.

In some embodiments, memory 144 and/or memory 174 can each be the sametype of memory and/or include the same components, structure,attributes, and/or functionality as that of memory 114. In someembodiments, memory 144 and/or memory 174 can each be a different typeof memory and/or include components, structure, attributes, and/orfunctionality that are different from that of memory 114.

Data 116, data 146, and/or data 176 according to example embodimentsdescribed herein can each include, for instance, video conference datathat can be retrieved, manipulated, created, and/or stored byprocessor(s) 112, processor(s) 142, and/or processor(s) 172,respectively. For instance, in one embodiment, data 116, data 146,and/or data 176 can each include video data (e.g., a video, videostream, byte stream), audio data, image data, and/or other data that canbe captured (e.g., during a video conference) at any of participatingcomputing devices 102, 104, 106, 110 (e.g., via camera 130) and/orjoining computing device 140 (e.g., via camera 160).

In some embodiments, data 116 and/or data 146 can each be transmitted(e.g., during a video conference) to hosting computing device 170 by anyof participating computing devices 102, 104, 106, 110 and/or joiningcomputing device 140, respectively. In some embodiments, data 176 can betransmitted (e.g., during a video conference) by hosting computingdevice 170 to any of participating computing devices 102, 104, 106, 110and/or joining computing device 140. In some embodiments, data 116, data146, and/or data 176 can each be accessed by and/or displayed to (e.g.,during a video conference) one or more users of participating computingdevices 102, 104, 106, 110 and/or joining computing device 140.

In some embodiments, data 146 and/or data 176 can each be the same typeof data as that of data 116 (e.g., reference frame(s) and/or deltaframe(s) of video data captured during a video conference and/orstatistical data corresponding to such frame(s)). In some embodiments,data 146 and/or data 176 can each be a different type of data than thatof data 116 (e.g., different reference frame(s) and/or different deltaframe(s) of video data captured during a video conference and/ordifferent statistical data corresponding to such frame(s)).

Instructions 118, instructions 148, and/or instructions 178 according toexample embodiments described herein can each include, for example, anycomputer-readable and/or computer executable instructions (e.g.,software, routines, processing threads) that, when executed byprocessor(s) 112, processor(s) 142, and/or processor(s) 172,respectively, cause participating computing devices 102, 104, 106, 110,joining computing device 140, and/or hosting computing device 170,respectively, to perform one or more certain operations. For example, insome embodiments, instructions 118, instructions 148, and/orinstructions 178 can each include instructions that, when executed byprocessor(s) 112, processor(s) 142, and/or processor(s) 172,respectively, can facilitate video conferencing between participatingcomputing devices 102, 104, 106, 110, joining computing device 140,and/or hosting computing device 170.

In some embodiments, instructions 148 and/or instructions 178 can eachbe the same type of instructions as that of instructions 118 (e.g.,instructions that can facilitate video conferencing between any ofparticipating computing devices 102, 104, 106, 110, joining computingdevice 140, and/or hosting computing device 170). In some embodiments,instructions 148 and/or instructions 178 can each be a different type ofinstructions than instructions 118 (e.g., instructions specific tojoining computing device 140 and/or hosting computing device 170,respectively, that can facilitate video conferencing between any ofparticipating computing devices 102, 104, 106, 110, joining computingdevice 140, and/or hosting computing device 170).

Video conference application 120, video conference application 150,and/or video conference application 180 according to example embodimentsdescribed herein can each be implemented by any of participatingcomputing devices 102, 104, 106, 110, joining computing device 140,and/or hosting computing device 170, respectively, to facilitate videoconferencing between participating computing devices 102, 104, 106, 110,joining computing device 140, and/or hosting computing device 170. Insome embodiments, video conference application 150 and/or videoconference application 180 can each be the same type of video conferenceapplication and/or include the same components, structure, attributes,and/or functionality as that of video conference application 120. Insome embodiments, video conference application 150 and/or videoconference application 180 can each be a different type of videoconference application and/or include components, structure, attributes,and/or functionality that are different from that of video conferenceapplication 120.

In the example embodiment depicted in FIG. 1 , video conferenceapplication 120 can be respectively implemented (e.g., executed, run,initiated) by any of participating computing devices 102, 104, 106, 110(e.g., via processor(s) 112) to capture video data, image data, and/oraudio data using, for instance, camera 130, a microphone (not shown),and/or another data input device that can be respectively coupled to,included with, and/or otherwise associated with any of participatingcomputing devices 102, 104, 106, 110. In this embodiment, videoconference application 150 can be implemented (e.g., executed, run,initiated) by joining computing device 140 (e.g., via processor(s) 142)to capture video data, image data, and/or audio data using, forinstance, camera 160, a microphone (not shown), and/or another datainput device that can be coupled to, included with, and/or otherwiseassociated with joining computing device 140.

Associated display device 124 and/or associated display device 154according to example embodiments described herein can be any type ofdisplay device that can be configured to display video data (e.g., avideo stream) and/or image data and can be coupled to, included with,and/or otherwise associated with any of participating computing devices102, 104, 106, 110 and/or joining computing device 140, respectively.For example, in at least one embodiment, associated display device 124and/or associated display device 154 can each be a monitor, a screen,and/or a display device that can include, but is not limited to, alaptop display device, a smartphone display device, a communicativelyconnected display device, and/or another associated display device.

In some embodiments, associated display device 154 can be the same typeof associated display device and/or include the same components,structure, attributes, and/or functionality as that of associateddisplay device 124. In some embodiments, associated display device 154can be a different type of associated display device and/or includecomponents, structure, attributes, and/or functionality that aredifferent from that of associated display device 124.

Encoder 126 and/or encoder 156 according to example embodimentsdescribed herein can each constitute and/or include, for instance, avideo encoder (e.g., hardware and/or software video encoder) that can beconfigured to compress and/or encode video data (e.g., video stream,video frame(s), image data, statistical data corresponding to such videodata). In some embodiments, encoder 156 can be the same type of encoder(e.g., same type of video encoder) and/or include the same components,structure, attributes, and/or functionality as that of encoder 126. Insome embodiments, encoder 156 can be a different type of encoder (e.g.,different type of video encoder) and/or include components, structure,attributes, and/or functionality that are different from that of encoder126.

Decoder 128 and/or decoder 158 according to example embodimentsdescribed herein can each constitute and/or include, for instance, avideo decoder (e.g., hardware and/or software video decoder) that can beconfigured to decompress and/or decode video data (e.g., video stream,video frame(s), image data, statistical data corresponding to such videodata). In some embodiments, decoder 158 can be the same type of decoder(e.g., same type of video decoder) and/or include the same components,structure, attributes, and/or functionality as that of decoder 128. Insome embodiments, decoder 158 can be a different type of decoder (e.g.,different type of video decoder) and/or include components, structure,attributes, and/or functionality that are different from that of decoder128.

Camera 130 and/or camera 160 according to example embodiments describedherein can each be any device capable of capturing visual data (e.g., adigital camera, analog camera, an integrated webcam, communicativelyconnected camera device). In some embodiments, camera 160 can be thesame type of camera (e.g., same type of video camera) and/or include thesame components, structure, attributes, and/or functionality as that ofcamera 130. In some embodiments, camera 160 can be a different type ofcamera (e.g., different type of video camera) and/or include components,structure, attributes, and/or functionality that are different from thatof camera 130.

Compression algorithm 122, compression algorithm 152, and/or compressionalgorithm 182 according to example embodiments described herein can eachbe a compression algorithm (e.g., data compression algorithm) that canbe implemented to compress data such as, for example, video data (e.g.,a video frame(s), image data, statistical data corresponding to suchvideo data). In at least one embodiment, compression algorithm 122,compression algorithm 152, and/or compression algorithm 182 can each bea compression algorithm (e.g., a video and/or image compressionalgorithm) having a lossless compression mode and/or a near losslesscompression mode. In this embodiment, compression algorithm 122,compression algorithm 152, and/or compression algorithm 182 can each beimplemented in such a lossless compression mode or near losslesscompression mode to provide lossless or near lossless compression ofdata such as, for instance, video data associated with a videoconference between any of participating computing devices 102, 104, 106,110, joining computing device 140, and/or hosting computing device 170.

In some embodiments, compression algorithm 152 and/or compressionalgorithm 182 can each be the same type of compression algorithm and/orinclude the same components, structure, attributes, and/or functionalityas that of compression algorithm 122. In some embodiments, compressionalgorithm 152 and/or compression algorithm 182 can each be a differenttype of compression algorithm and/or include components, structure,attributes, and/or functionality that are different from that ofcompression algorithm 122.

Video conference system 184 according to example embodiments describedherein can constitute and/or include a “system” as defined above thatcan be implemented by hosting computing device 170 (e.g., viaprocessor(s) 172) to facilitate video conferencing between any ofparticipating computing devices 102, 104, 106, 110, joining computingdevice 140, and/or hosting computing device 170. In the exampleembodiment depicted in FIG. 1 , video conference system 184 can beimplemented (e.g., executed, run, initiated) by hosting computing device170 (e.g., via processor(s) 172) to implement and/or conduct a videoconference between any of participating computing devices 102, 104, 106,110, joining computing device 140, and/or hosting computing device 170.For example, in this embodiment, video conferencing system 184 can beconfigured to facilitate operation of video conference application 120,video conference application 150, and/or video conference application180 that can be respectively executed by any of participating computingdevices 102, 104, 106, 110, joining computing device 140, and/or hostingcomputing device 170.

In the example embodiment depicted in FIG. 1 , video conference system184 can receive video stream data from any of participating computingdevices 102, 104, 106, 110 and/or joining computing device 140 (e.g.,via network(s) 190) respectively associated with a plurality of videoconference attendees. In this embodiment, video conference system 184can provide the video stream data to any of participating computingdevices 102, 104, 106, 110 and/or joining computing device 140.

In at least one embodiment, video conference system 184 can manageprovided stream data quality. For example, in some embodiments, videoconference system 184 can manage provided stream data quality bytransmitting requests to any of participating computing devices 102,104, 106, 110 and/or joining computing device 140 to provide videostream data with a certain quality and/or resolution. In theseembodiments, hosting computing device 170 can utilize video conferencesystem 184 to facilitate the functionality of video conferenceapplication 120 and/or video conference application 150 that can beexecuted on any of participating computing devices 102, 104, 106, 110and/or joining computing device 140, respectively.

Network(s) 190 according to example embodiments described herein can beany type of communications network such as, for example, a local areanetwork (e.g., intranet), wide area network (e.g., Internet), and/orsome combination thereof. In some embodiments, communication between anyof participating computing devices 102, 104, 106, 110, joining computingdevice 140, and/or hosting computing device 170 can be carried vianetwork interface with network(s) 190 using any type of wired and/orwireless connection, using a variety of communication protocols,encodings or formats, and/or protection schemes. For example, in atleast one embodiment, communication between such devices can be carriedvia network interface with network(s) 190 using: communication protocolssuch as, for instance, transmission control protocol/internet protocol(TCP/IP), hypertext transfer protocol (HTTP), simple mail transferprotocol (SMTP), file transfer protocol (FTP), user datagram protocol(UDP), real-time transport protocol (RTP), and/or real-time transportcontrol protocol (RTCP); encodings or formats such as, for instance,hypertext markup language (HTML) and/or extensible markup language(XML); and/or protection schemes such as, for instance, virtual privatenetwork (VPN), secure HTTP, secure shell (SSH), secure sockets layer(SSL), and/or secure real-time transport protocol (SRTP).

Example Device and System Operation

Continuing with FIG. 1 , according to example embodiments of the presentdisclosure, video conference environment 100 can facilitate losslesscompression of an internal encoder state of a video encoder running on afirst computing device being used to participate in a video conference.In these example embodiments, video conference environment 100 canfurther facilitate transfer of the compressed internal encoder state toa second computing device being used to join the video conference tosynchronize an internal decoder state of a video decoder running on thesecond computing device with the internal encoder state of the videoencoder running on the first computing device.

In one example embodiment, participating computing device 110 can beused to participate in a video conference (e.g., via video conferenceapplication 120) that is in progress when joining computing device 140is used to join the video conference (e.g., via video conferenceapplication 150). In this embodiment, when joining computing device 140joins the video conference, participating computing device 110 can:perform a lossless compression process (e.g., using compressionalgorithm 122 according to instructions 118) to compress an internalencoder state (e.g., an existing and/or most current internal encoderstate) of encoder 126 running on participating computing device 110; andtransfer (e.g., via network(s) 190 and/or video conference applications120, 150) the compressed internal encoder state to joining computingdevice 140 to synchronize an internal decoder state of decoder 158running on joining computing device 140 with the internal encoder stateof encoder 126 running on participating computing device 110.

In another example embodiment, participating computing device 110 can beused to participate in a video conference (e.g., via video conferenceapplication 120) that is in progress when joining computing device 140is used to join the video conference (e.g., via video conferenceapplication 150). In this embodiment, when joining computing device 140joins the video conference, hosting computing device 170 can: perform alossless compression process (e.g., using compression algorithm 182according to instructions 178) to compress an internal encoder state(e.g., an existing and/or most current internal encoder state) ofencoder 126 running on participating computing device 110; and transfer(e.g., via network(s) 190, video conference applications 150, 180,and/or video conference system 184) the compressed internal encoderstate to joining computing device 140 to synchronize an internal decoderstate of decoder 158 running on joining computing device 140 with theinternal encoder state of encoder 126 running on participating computingdevice 110.

In another example embodiment, participating computing devices 102, 104,106, 110 can be used to participate in a video conference (e.g., viavideo conference application 120 respectively running on eachparticipating computing device) that is in progress when joiningcomputing device 140 is used to join the video conference (e.g., viavideo conference application 150). In this embodiment, when joiningcomputing device 140 joins the video conference, hosting computingdevice 170 can: perform a lossless compression process (e.g., usingcompression algorithm 182 according to instructions 178) to compress aninternal encoder state (e.g., an existing and/or most current internalencoder state) of each video encoder respectively running onparticipating computing devices 102, 104, 106, 110 (e.g., each encoder126 respectively running on participating computing devices 102, 104,106, 110); and transfer (e.g., via network(s) 190, video conferenceapplications 150, 180, and/or video conference system 184) eachcompressed internal encoder state to joining computing device 140 tosynchronize an internal decoder state of decoder 158 running on joiningcomputing device 140 with the internal encoder state of each videoencoder respectively running on participating computing devices 102,104, 106, 110 (e.g., the internal encoder state of each encoder 126respectively running on participating computing devices 102, 104, 106,110).

In another example embodiment, participating computing device 110 can beused to participate in a video conference (e.g., via video conferenceapplication 120) that is in progress when joining computing device 140is used to join the video conference (e.g., via video conferenceapplication 150). In this embodiment, when joining computing device 140joins the video conference, joining computing device 140 can: receive(e.g., via network(s) 190, video conference applications 120, 150,and/or 180, and/or video conference system 184) a compressed internalencoder state of encoder 126 running on participating computing device110 (e.g., a compressed version of an existing and/or most currentinternal encoder state of encoder 126); and use the compressed internalencoder state to synchronize an internal decoder state of decoder 158running on joining computing device 140 with the internal encoder stateof encoder 126 running on participating computing device 110 (e.g., bystoring the compressed internal encoder state in the memory (e.g., RAM)of decoder 158).

In another example embodiment, participating computing devices 102, 104,106, 110 can be used to participate in a video conference (e.g., viavideo conference application 120 respectively running on eachparticipating computing device) that is in progress when joiningcomputing device 140 is used to join the video conference (e.g., viavideo conference application 150). In this embodiment, when joiningcomputing device 140 joins the video conference, joining computingdevice 140 can: receive (e.g., via network(s) 190, video conferenceapplications 120, 150, and/or 180, and/or video conference system 184) acompressed internal encoder state of each video encoder respectivelyrunning on participating computing devices 102, 104, 106, 110 (e.g., acompressed internal encoder state of each encoder 126 respectivelyrunning on participating computing devices 102, 104, 106, 110); and usethe compressed internal encoder states to synchronize an internaldecoder state of decoder 158 running on joining computing device 140with the internal encoder state of each video encoder respectivelyrunning on participating computing devices 102, 104, 106, 110 (e.g., theinternal encoder state of each encoder 126 respectively running onparticipating computing devices 102, 104, 106, 110).

Example Methods

FIG. 2 illustrates a flow diagram of an example, non-limitingcomputer-implemented method 200 according to one or more exampleembodiments of the present disclosure. Computer-implemented method 200can be implemented using, for instance, video conference environment100, participating computing device 110, joining computing device 140,and/or hosting computing device 170 described above with reference toFIG. 1 .

The example embodiment illustrated in FIG. 2 depicts operationsperformed in a particular order for purposes of illustration anddiscussion. Those of ordinary skill in the art, using the disclosuresprovided herein, will understand that various operations or steps ofcomputer-implemented method 200 or any of the other methods disclosedherein may be adapted, modified, rearranged, performed simultaneously,include operations not illustrated, and/or modified in various wayswithout deviating from the scope of the present disclosure.

At 202, computer-implemented method 200 can include maintaining, by afirst computing device (e.g., participating computing device 110)operatively coupled to one or more processors (e.g., processor(s) 112),an internal encoder state of an encoder (e.g., encoder 126) running onthe first computing device, the first computing device being used toparticipate in a video conference currently in progress. For example,participating computing device 110 can periodically and/or continuously(e.g., as needed) update an existing and/or most current internalencoder state of encoder 126 using, for instance, delta frames havingcurrent video data associated with a video stream of the videoconference that can be generated by and/or provided to (e.g., as needed)participating computing device 110 during the video conference.

At 204, computer-implemented method 200 can include receiving, by thefirst computing device, data indicative of a second computing device(e.g., joining computing device 140) being used to join the videoconference. For example, participating computing device 110 can receive(e.g., via network(s) 190, video conference applications 120, 180,and/or video conference system 184) a message from hosting computingdevice 170 indicating joining computing device 140 is joining the videoconference.

At 206, computer-implemented method 200 can include compressing, by thefirst computing device, based at least in part on (e.g., in response to)receipt of the data, the internal encoder state to generate a compressedinternal encoder state of the encoder. For example, participatingcomputing device 110 can implement (e.g., via processor(s) 112)compression algorithm 122 in a lossless or near lossless mode and/or inaccordance with instructions 118 to compress the existing and/or mostcurrent internal encoder state of encoder 126 to generate a compressedinternal encoder state of encoder 126.

At 208, computer-implemented method 200 can include transmitting, by thefirst computing device, the compressed internal encoder state to thesecond computing device to synchronize (e.g., by joining computingdevice 140) the internal encoder state of the encoder running on thefirst computing device with an internal decoder state of a decoder(e.g., decoder 158) running on the second computing device. For example,participating computing device 110 can transmit (e.g., via network(s)190 and/or video conference applications 120, 150) the compressedinternal encoder state to joining computing device 140 to synchronize(e.g., by joining computing device 140) the internal encoder state ofencoder 126 running on participating computing device 110 with aninternal decoder state of decoder 158 running on joining computingdevice 140.

FIG. 3 illustrates a flow diagram of an example, non-limitingcomputer-implemented method 300 according to one or more exampleembodiments of the present disclosure. Computer-implemented method 300can be implemented using, for instance, video conference environment100, participating computing device 110, joining computing device 140,and/or hosting computing device 170 described above with reference toFIG. 1 .

The example embodiment illustrated in FIG. 3 depicts operationsperformed in a particular order for purposes of illustration anddiscussion. Those of ordinary skill in the art, using the disclosuresprovided herein, will understand that various operations or steps ofcomputer-implemented method 300 or any of the other methods disclosedherein may be adapted, modified, rearranged, performed simultaneously,include operations not illustrated, and/or modified in various wayswithout deviating from the scope of the present disclosure.

At 302, computer-implemented method 300 can include receiving, by afirst computing device (e.g., hosting computing device 170) operativelycoupled to one or more processors (e.g., processor(s) 172), an internalencoder state of an encoder (e.g., encoder 126) running on a secondcomputing device (e.g., participating computing device 110) being usedto participate in a video conference currently in progress. For example,hosting computing device 170 can receive (e.g., via network(s) 190,video conference applications 120, 180, and/or video conference system184) the internal encoder state (e.g., the existing and/or most currentinternal encoder state) of encoder 126 running on participatingcomputing device 110.

At 304, computer-implemented method 300 can include receiving, by thefirst computing device, data indicative of a third computing device(e.g., joining computing device 140) being used to join the videoconference. For example, hosting computing device 170 can receive (e.g.,via network(s) 190, video conference applications 150, 180, and/or videoconference system 184) a request from joining computing device 140 tojoin the video conference.

At 306, computer-implemented method 300 can include compressing, by thefirst computing device, based at least in part on receipt of the data,the internal encoder state to generate a compressed internal encoderstate of the encoder. For example, hosting computing device 170 canimplement (e.g., via processor(s) 172) compression algorithm 182 in alossless or near lossless mode and/or in accordance with instructions178 to compress the existing and/or most current internal encoder stateof encoder 126 to generate a compressed internal encoder state ofencoder 126.

At 308, computer-implemented method 300 can include transmitting, by thefirst computing device, the compressed internal encoder state to thethird computing device to synchronize (e.g., by joining computing device140) the internal encoder state of the encoder running on the secondcomputing device with an internal decoder state of a decoder (e.g.,decoder 158) running on the third computing device. For example, hostingcomputing device 170 can transmit (e.g., via network(s) 190, videoconference applications 150, 180, and/or video conference system 184)the compressed internal encoder state to joining computing device 140 tosynchronize (e.g., by joining computing device 140) the internal encoderstate of encoder 126 running on participating computing device 110 withan internal decoder state of decoder 158 running on joining computingdevice 140.

FIG. 4 illustrates a flow diagram of an example, non-limitingcomputer-implemented method 400 according to one or more exampleembodiments of the present disclosure. Computer-implemented method 400can be implemented using, for instance, video conference environment100, participating computing device 110, joining computing device 140,and/or hosting computing device 170 described above with reference toFIG. 1 .

The example embodiment illustrated in FIG. 4 depicts operationsperformed in a particular order for purposes of illustration anddiscussion. Those of ordinary skill in the art, using the disclosuresprovided herein, will understand that various operations or steps ofcomputer-implemented method 400 or any of the other methods disclosedherein may be adapted, modified, rearranged, performed simultaneously,include operations not illustrated, and/or modified in various wayswithout deviating from the scope of the present disclosure.

At 402, computer-implemented method 400 can include maintaining, by afirst computing device (e.g., participating computing device 110)operatively coupled to one or more processors (e.g., processor(s) 112),an internal encoder state of an encoder (e.g., encoder 126) running onthe first computing device, the first computing device being used toparticipate in a video conference currently in progress. For example,participating computing device 110 can periodically and/or continuously(e.g., as needed) update an existing and/or most current internalencoder state of encoder 126 using, for instance, delta frames havingcurrent video data associated with a video stream of the videoconference that can be generated by and/or provided to (e.g., as needed)participating computing device 110 during the video conference.

At 404, computer-implemented method 400 can include receiving, by thefirst computing device, data indicative of a second computing device(e.g., joining computing device 140) being used to join the videoconference. For example, participating computing device 110 can receive(e.g., via network(s) 190, video conference applications 120, 180,and/or video conference system 184) a message from hosting computingdevice 170 indicating joining computing device 140 is joining the videoconference.

At 406, computer-implemented method 400 can include compressing, by thefirst computing device, based at least in part on (e.g., in response to)receipt of the data, the internal encoder state to generate a compressedinternal encoder state of the encoder. For example, participatingcomputing device 110 can implement (e.g., via processor(s) 112)compression algorithm 122 in a lossless or near lossless mode and/or inaccordance with instructions 118 to compress the existing and/or mostcurrent internal encoder state of encoder 126 to generate a compressedinternal encoder state of encoder 126.

At 408, computer-implemented method 400 can include transmitting, by thefirst computing device, the compressed internal encoder state to thesecond computing device to synchronize (e.g., by joining computingdevice 140) the internal encoder state of the encoder running on thefirst computing device with an internal decoder state of a decoder(e.g., decoder 158) running on the second computing device. For example,participating computing device 110 can transmit (e.g., via network(s)190 and/or video conference applications 120, 150) the compressedinternal encoder state to joining computing device 140 to synchronize(e.g., by joining computing device 140) the internal encoder state ofencoder 126 running on participating computing device 110 with aninternal decoder state of decoder 158 running on joining computingdevice 140.

At 410, computer-implemented method 400 can include transmitting, by thefirst computing device, a current delta frame of video data associatedwith the video conference to the second computing device, the currentdelta frame being current at a time the second computing device is usedto join the video conference. For example, participating computingdevice 110 can send (e.g., via network(s) 190 and/or video conferenceapplications 120, 150) joining computing device 140 a delta frame of thevideo of the video conference that is the most current delta frame atthe time joining computing device 140 requests entry into the videoconference and/or at the time joining computing device 140 joins thevideo conference.

At 412, computer-implemented method 400 can include transmitting, by thefirst computing device, an instruction to the second computing deviceinstructing the second computing device to use the compressed internalencoder state and/or the current delta frame to update the internaldecoder state of the decoder running on the second computing device tosynchronize the internal encoder state of the encoder with the internaldecoder state of the decoder. For example, participating computingdevice 110 can instruct (e.g., via network(s) 190 and/or videoconference applications 120, 150) joining computing device 140 to storethe compressed internal encoder state and/or the current delta frame ofthe video data in the memory (e.g., RAM) of decoder 158 running onjoining computing device 140 such that the compressed internal encoderstate and/or the current delta frame constitute and/or serve as theinternal decoder state of decoder 158.

At 414, computer-implemented method 400 can include generating, by thefirst computing device, one or more delta frames comprising one or morevideo data updates associated with at least one of the current deltaframe, the internal encoder state, or the compressed internal encoderstate. For example, after synchronization of the internal states ofencoder 126 and decoder 158 as described above, participating computingdevice 110 can generate such delta frame(s) by computing and/ordetermining the difference in video data of current video frames in thevideo stream of the video conference compared to existing referenceframes of the internal encoder state of encoder 126. For instance,participating computing device 110 can generate delta frame(s) havingvideo data including portion(s) of video frame(s) and/or statisticaldata corresponding thereto that is different from and/or more current(e.g., newer) compared to the video data included in the compressedinternal encoder state of encoder 126 and/or the previously providedcurrent delta frame described above.

At 416, computer-implemented method 400 can include transmitting, by thefirst computing device, the one or more delta frames to the secondcomputing device based at least in part on synchronization of theinternal encoder state of the encoder with the internal decoder state ofthe decoder. For example, after synchronization of the internal statesof encoder 126 and decoder 158 as described above, participatingcomputing device 110 can periodically and/or continuously (e.g., asneeded) generate and transmit (e.g., via network(s) 190 and/or videoconference applications 120, 150) the above-described delta frame(s) tojoining computing device 140 so that joining computing device 140 canuse such delta frame(s) to update the internal decoder state of decoder158 and thereby maintain synchronization of the internal decoder stateof decoder 158 with the internal encoder state of encoder 126.

FIG. 5 illustrates a flow diagram of an example, non-limitingcomputer-implemented method 500 according to one or more exampleembodiments of the present disclosure. Computer-implemented method 400can be implemented using, for instance, video conference environment100, participating computing device 110, joining computing device 140,and/or hosting computing device 170 described above with reference toFIG. 1 .

The example embodiment illustrated in FIG. 5 depicts operationsperformed in a particular order for purposes of illustration anddiscussion. Those of ordinary skill in the art, using the disclosuresprovided herein, will understand that various operations or steps ofcomputer-implemented method 500 or any of the other methods disclosedherein may be adapted, modified, rearranged, performed simultaneously,include operations not illustrated, and/or modified in various wayswithout deviating from the scope of the present disclosure.

At 502, computer-implemented method 500 can include receiving, by afirst computing device (e.g., hosting computing device 170) operativelycoupled to one or more processors (e.g., processor(s) 172), dataindicative of a second computing device being used to join a videoconference currently in progress. For example, hosting computing device170 can receive (e.g., via network(s) 190, video conference applications120, 180, and/or video conference system 184) a request from joiningcomputing device 140 to join the video conference.

At 504, computer-implemented method 500 can include receiving, by thefirst computing device, based at least in part on receipt of the data,multiple internal encoder states of a plurality of encoders (e.g., aplurality of encoders 126) respectively running on multiple computingdevices (e.g., participating computing devices 102, 104, 106, 110) beingused to participate in the video conference at a time the secondcomputing device is used to join the video conference. For example,hosting computing device 170 can receive (e.g., via network(s) 190,video conference applications 120, 180, and/or video conference system184) the existing and/or most current internal encoder state of eachencoder 126 respectively running on participating computing devices 102,104, 106, 110.

At 506, computer-implemented method 500 can include compressing, by thefirst computing device, the multiple internal encoder states to generatea plurality of compressed internal encoder states respectivelycorresponding to the plurality of encoders. For example, hostingcomputing device 170 can implement (e.g., via processor(s) 172)compression algorithm 182 in a lossless or near lossless mode and/or inaccordance with instructions 178 to compress the existing and/or mostcurrent internal encoder state of each encoder 126 respectively runningon participating computing devices 102, 104, 106, 110 to generate acompressed internal encoder state corresponding to each encoder 126respectively running on participating computing devices 102, 104, 106,110.

At 508, computer-implemented method 500 can include transmitting, by thefirst computing device, the plurality of compressed internal encoderstates to the second computing device to synchronize (e.g., by joiningcomputing device 140) the multiple internal encoder states of theplurality of encoders respectively running on the multiple computingdevices with an internal decoder state of decoder (e.g., decoder 158)running on the second computing device. For example, hosting computingdevice 170 can transmit (e.g., via network(s) 190, video conferenceapplications 150, 180, and/or video conference system 184) the pluralityof compressed internal encoder states to joining computing device 140 tosynchronize (e.g., by joining computing device 140) the internal encoderstate of each encoder 126 respectively running on participatingcomputing devices 102, 104, 106, 110 with an internal decoder state ofdecoder 158 running on joining computing device 140.

FIG. 6 illustrates a flow diagram of an example, non-limitingcomputer-implemented method 600 according to one or more exampleembodiments of the present disclosure. Computer-implemented method 600can be implemented using, for instance, video conference environment100, participating computing device 110, joining computing device 140,and/or hosting computing device 170 described above with reference toFIG. 1 .

The example embodiment illustrated in FIG. 6 depicts operationsperformed in a particular order for purposes of illustration anddiscussion. Those of ordinary skill in the art, using the disclosuresprovided herein, will understand that various operations or steps ofcomputer-implemented method 600 or any of the other methods disclosedherein may be adapted, modified, rearranged, performed simultaneously,include operations not illustrated, and/or modified in various wayswithout deviating from the scope of the present disclosure.

At 602, computer-implemented method 600 can include receiving, by afirst computing device (e.g., hosting computing device 170) operativelycoupled to one or more processors (e.g., processor(s) 172), an internalencoder state of an encoder (e.g., encoder 126) running on a secondcomputing device (e.g., participating computing device 110) being usedto participate in a video conference currently in progress. For example,hosting computing device 170 can receive (e.g., via network(s) 190,video conference applications 120, 180, and/or video conference system184) the internal encoder state (e.g., the existing and/or most currentinternal encoder state) of encoder 126 running on participatingcomputing device 110.

At 604, computer-implemented method 600 can include receiving, by thefirst computing device, data indicative of a third computing device(e.g., joining computing device 140) being used to join the videoconference. For example, hosting computing device 170 can receive (e.g.,via network(s) 190, video conference applications 150, 180, and/or videoconference system 184) a request from joining computing device 140 tojoin the video conference.

At 606, computer-implemented method 600 can include compressing, by thefirst computing device, based at least in part on receipt of the data,the internal encoder state to generate a compressed internal encoderstate of the encoder. For example, hosting computing device 170 canimplement (e.g., via processor(s) 172) compression algorithm 182 in alossless or near lossless mode and/or in accordance with instructions178 to compress the existing and/or most current internal encoder stateof encoder 126 to generate a compressed internal encoder state ofencoder 126.

At 608, computer-implemented method 600 can include transmitting, by thefirst computing device, the compressed internal encoder state to thethird computing device to synchronize (e.g., by joining computing device140) the internal encoder state of the encoder running on the secondcomputing device with an internal decoder state of a decoder (e.g.,decoder 158) running on the third computing device. For example, hostingcomputing device 170 can transmit (e.g., via network(s) 190, videoconference applications 150, 180, and/or video conference system 184)the compressed internal encoder state to joining computing device 140 tosynchronize (e.g., by joining computing device 140) the internal encoderstate of encoder 126 running on participating computing device 110 withan internal decoder state of decoder 158 running on joining computingdevice 140.

At 610, computer-implemented method 600 can include transmitting, by thefirst computing device, a current delta frame of video data associatedwith the video conference to the third computing device, the currentdelta frame being current at a time the third computing device is usedto join the video conference. For example, hosting computing device 170can send (e.g., via network(s) 190, video conference applications 150,180, and/or video conference system 184) joining computing device 140 adelta frame of the video of the video conference that is the mostcurrent delta frame at the time joining computing device 140 requestsentry into the video conference and/or at the time joining computingdevice 140 joins the video conference.

At 612, computer-implemented method 600 can include transmitting, by thefirst computing device, an instruction to the third computing deviceinstructing the third computing device to use the compressed internalencoder state and/or the current delta frame to update the internaldecoder state of the decoder running on the third computing device tosynchronize the internal encoder state of the encoder running on thesecond computing device with the internal decoder state of the decoderrunning on the third computing device. For example, hosting computingdevice 170 can instruct (e.g., via network(s) 190, video conferenceapplications 150, 180, and/or video conference system 184) joiningcomputing device 140 to store the compressed internal encoder stateand/or the current delta frame of the video data in the memory (e.g.,RAM) of decoder 158 running on joining computing device 140 such thatthe compressed internal encoder state and/or the current delta frameconstitute and/or serve as the internal decoder state of decoder 158.

At 614, computer-implemented method 600 can include generating, by thefirst computing device, one or more delta frames comprising one or morevideo data updates associated with at least one of the current deltaframe, the internal encoder state, or the compressed internal encoderstate. For example, after synchronization of the internal states ofencoder 126 and decoder 158 as described above, hosting computing device170 can generate such delta frame(s) by computing and/or determining thedifference in video data of current video frames in the video stream ofthe video conference compared to existing reference frames of theinternal encoder state of encoder 126. For instance, hosting computingdevice 170 can generate delta frame(s) having video data includingportion(s) of video frame(s) and/or statistical data correspondingthereto that is different from and/or more current (e.g., newer)compared to the video data included in the compressed internal encoderstate of encoder 126 and/or the previously provided current delta framedescribed above.

At 616, computer-implemented method 600 can include transmitting, by thefirst computing device, one or more delta frames to the third computingdevice based at least in part on synchronization of the internal encoderstate of the encoder running on the second computing device with theinternal decoder state of the decoder running on the third computingdevice. For example, after synchronization of the internal states ofencoder 126 and decoder 158 as described above, hosting computing device170 can periodically and/or continuously (e.g., as needed) generate andtransmit (e.g., via network(s) 190, video conference applications 150,180, and/or video conference system 184) the above-described deltaframe(s) to joining computing device 140 so that joining computingdevice 140 can use such delta frame(s) to update the internal decoderstate of decoder 158 and thereby maintain synchronization of theinternal decoder state of decoder 158 with the internal encoder state ofencoder 126.

FIG. 7 illustrates a flow diagram of an example, non-limitingcomputer-implemented method 700 according to one or more exampleembodiments of the present disclosure. Computer-implemented method 700can be implemented using, for instance, video conference environment100, participating computing device 110, joining computing device 140,and/or hosting computing device 170 described above with reference toFIG. 1 .

The example embodiment illustrated in FIG. 7 depicts operationsperformed in a particular order for purposes of illustration anddiscussion. Those of ordinary skill in the art, using the disclosuresprovided herein, will understand that various operations or steps ofcomputer-implemented method 700 or any of the other methods disclosedherein may be adapted, modified, rearranged, performed simultaneously,include operations not illustrated, and/or modified in various wayswithout deviating from the scope of the present disclosure.

At 702, computer-implemented method 700 can include transmitting, by afirst computing device (e.g., joining computing device 140) operativelycoupled to one or more processors (e.g., processor(s) 142), to a secondcomputing device (e.g., hosting computing device 170), a request to joina video conference currently in progress. For example, joining computingdevice 140 can transmit (e.g., via network(s) 190, video conferenceapplications 150, 180, and/or video conference system 184) a message tohosting computing device 170 requesting to join the video conference.

At 704, computer-implemented method 700 can include receiving, by thefirst computing device, a compressed internal encoder state of anencoder (e.g., encoder 126) running on a third computing device (e.g.,participating computing device 110) being used to participate in thevideo conference. For example, based at least in part on (e.g., inresponse to) submittal of the request to join the video conference asdescribed above, joining computing device 140 can receive from hostingcomputing device 170 (e.g., via network(s) 190, video conferenceapplications 150, 180, and/or video conference system 184) a compressedversion of an existing and/or most current internal encoder state ofencoder 126 running on participating computing device 110.

At 706, computer-implemented method 700 can include receiving, by thefirst computing device, a current delta frame comprising video dataassociated with the video conference. For example, joining computingdevice 140 can receive (e.g., via network(s) 190, video conferenceapplications 150, 180, and/or video conference system 184) a delta frameof the video of the video conference that is the most current deltaframe at the time joining computing device 140 requests entry into thevideo conference and/or at the time joining computing device 140 joinsthe video conference.

In some embodiments, computer-implemented method 700 can further includereceiving, by the first computing device, an instruction to use thecompressed internal encoder state and/or the current delta frame toupdate an internal decoder state of a decoder (e.g., decoder 158)running on the first computing device to synchronize the internalencoder state of the encoder with the internal decoder state of thedecoder. For example, joining computing device 140 can receive (e.g.,via network(s) 190, video conference applications 150, 180, and/or videoconference system 184) an instruction to store the compressed internalencoder state and/or the current delta frame of the video data in thememory (e.g., RAM) of decoder 158 running on joining computing device140 such that the compressed internal encoder state and/or the currentdelta frame constitute and/or serve as the internal decoder state ofdecoder 158.

At 708, computer-implemented method 700 can include synchronizing, bythe first computing device, using at least one of the compressedinternal encoder state or the current delta frame, an internal decoderstate of a decoder (e.g., decoder 158) running on the first computingdevice with the internal encoder state of the encoder running on thethird computing device. For example, joining computing device 140 canstore the compressed internal encoder state and/or the current deltaframe of the video data in the memory (e.g., RAM) of decoder 158 runningon joining computing device 140 such that the compressed internalencoder state and/or the current delta frame constitute and/or serve asthe internal decoder state of decoder 158. In this example, once joiningcomputing device 140 has stored the compressed internal encoder stateand/or the current delta frame in the memory of decoder 158 such thatthe compressed internal encoder state and/or the current delta frameconstitute and/or serve as the internal decoder state of decoder 158,the internal encoder state of encoder 126 running on participatingcomputing device 110 will be synchronized with the internal decoderstate of decoder 158 running on joining computing device 140.

Additional Disclosure

The technology discussed herein makes reference to servers, databases,software applications, and other computer-based systems, as well asactions performed by, and information sent to and from such systems. Theinherent flexibility of computer-based systems allows for a greatvariety of possible configurations, combinations, and divisions of tasksand functionality between and among components. For instance, processesdiscussed herein can be implemented using a single device or componentor multiple devices or components working in combination. Databases andapplications can be implemented on a single system or distributed acrossmultiple systems. Distributed components can operate sequentially or inparallel.

While the present subject matter has been described in detail withrespect to various specific example embodiments thereof, each example isprovided by way of explanation, not limitation of the disclosure. Thoseskilled in the art, upon attaining an understanding of the foregoing,can readily produce alterations to, variations of, and equivalents tosuch embodiments. Accordingly, the subject disclosure does not precludeinclusion of such modifications, variations and/or additions to thepresent subject matter as would be readily apparent to one of ordinaryskill in the art. For instance, features illustrated or described aspart of one embodiment can be used with another embodiment to yield astill further embodiment. Thus, it is intended that the presentdisclosure covers such alterations, variations, and equivalents.

1.-20. (canceled)
 21. A computer-implemented method, comprising: joining, by a first computing device operatively coupled to one or more processors, a video conference currently in progress, wherein the video conference comprises the first computing device and a second computing device, and wherein joining the video conference comprises running a decoder; receiving, by the first computing device, data indicative of an internal encoder state of an encoder running on the second computing device; and using, by the first computing device, the data indicative of the internal encoder state to synchronize an internal decoder state of the decoder running on the first computing device with the internal encoder state of the encoder running on the second computing device.
 22. The computer-implemented method of claim 21, wherein receiving the data indicative of the internal encoder state of the encoder running on the second computing device comprises: receiving, by the first computing device from the second computing device, the data indicative of the internal encoder state of the encoder running on the second computing device.
 23. The computer-implemented method of claim 21, wherein receiving the data indicative of the internal encoder state of the encoder running on the second computing device comprises: receiving, by the first computing device from a computing system that hosts the video conference, the data indicative of the internal encoder state of the encoder running on the second computing device.
 24. The computer-implemented method of claim 21, wherein the internal encoder state comprises at least one of: one or more portions of one or more reference frames of video data associated with the video conference; or statistical data corresponding to at least one of the one or more portions of the one or more reference frames or the one or more reference frames.
 25. The computer-implemented method of claim 21, wherein receiving the data indicative of the internal encoder state of the encoder running on the second computing device comprises: receiving, by the first computing device from the second computing device, a compressed internal encoder state of the encoder running on the second computing device.
 26. The computer-implemented method of claim 25, wherein the compressed internal encoder state comprises at least one of: one or more compressed portions of one or more reference frames of video data associated with the video conference; or compressed statistical data corresponding to at least one of the one or more compressed portions of the one or more reference frames or the one or more reference frames.
 27. The computer-implemented method of claim 25, wherein using the data indicative of the internal encoder state to synchronize the internal decoder state of the decoder running on the first computing device with the internal encoder state of the encoder running on the second computing device comprises: receiving, by the first computing device, an instruction from the second computing device instructing the first computing device to use the compressed internal encoder state to update the internal decoder state of the decoder running on the first computing device to synchronize the internal encoder state of the encoder with the internal decoder state of the decoder; and using, by the first computing device, the compressed internal encoder state to synchronize the internal decoder state of the decoder running on the first computing device with the internal encoder state of the encoder running on the second computing device.
 28. The computer-implemented method of claim 21, wherein the method further comprises: receiving, by the first computing device, a current delta frame of video data associated with the video conference from the second computing device, the current delta frame being current at a time the first computing device joins the video conference.
 29. A first computing device, comprising: one or more processors; and one or more non-transitory computer-readable media that store instructions that, when executed by the one or more processors, cause the first computing device to perform operations, the operations comprising: joining a video conference currently in progress, wherein the video conference comprises the first computing device and a second computing device, and wherein joining the video conference comprises running a decoder; receiving data indicative of an internal encoder state of an encoder running on the second computing device; and using the data indicative of the internal encoder state to synchronize an internal decoder state of the decoder running on the first computing device with the internal encoder state of the encoder running on the second computing device.
 30. The first computing device of claim 29, wherein receiving the data indicative of the internal encoder state of the encoder running on the second computing device comprises: receiving, from the second computing device, the data indicative of the internal encoder state of the encoder running on the second computing device.
 31. The first computing device of claim 29, wherein receiving the data indicative of the internal encoder state of the encoder running on the second computing device comprises: receiving, from a computing system that hosts the video conference, the data indicative of the internal encoder state of the encoder running on the second computing device.
 32. The first computing device of claim 29, wherein the internal encoder state comprises at least one of: one or more portions of one or more reference frames of video data associated with the video conference; or statistical data corresponding to at least one of the one or more portions of the one or more reference frames or the one or more reference frames.
 33. The first computing device of claim 29, wherein receiving the data indicative of the internal encoder state of the encoder running on the second computing device comprises: receiving, from the second computing device, a compressed internal encoder state of the encoder running on the second computing device.
 34. The first computing device of claim 33, wherein the compressed internal encoder state comprises at least one of: one or more compressed portions of one or more reference frames of video data associated with the video conference; or compressed statistical data corresponding to at least one of the one or more compressed portions of the one or more reference frames or the one or more reference frames.
 35. The first computing device of claim 33, wherein using the data indicative of the internal encoder state to synchronize the internal decoder state of the decoder running on the first computing device with the internal encoder state of the encoder running on the second computing device comprises: receiving an instruction from the second computing device instructing the first computing device to use the compressed internal encoder state to update the internal decoder state of the decoder running on the first computing device to synchronize the internal encoder state of the encoder with the internal decoder state of the decoder; and using the compressed internal encoder state to synchronize the internal decoder state of the decoder running on the first computing device with the internal encoder state of the encoder running on the second computing device.
 36. The first computing device of claim 29, wherein the operations further comprises: receiving a current delta frame of video data associated with the video conference from the second computing device, the current delta frame being current at a time the first computing device joins the video conference.
 37. One or more non-transitory computer-readable media that store instructions that, when executed by one or more processors of a first computing device, cause the first computing device to perform operations, the operations comprising: joining a video conference currently in progress, wherein the video conference comprises the first computing device and a second computing device, and wherein joining the video conference comprises running a decoder; receiving data indicative of an internal encoder state of an encoder running on the second computing device; and using the data indicative of the internal encoder state to synchronize an internal decoder state of the decoder running on the first computing device with the internal encoder state of the encoder running on the second computing device.
 38. The one or more non-transitory computer-readable media of claim 37, wherein receiving the data indicative of the internal encoder state of the encoder running on the second computing device comprises: receiving, from the second computing device, the data indicative of the internal encoder state of the encoder running on the second computing device.
 39. The one or more non-transitory computer-readable media of claim 37, wherein receiving the data indicative of the internal encoder state of the encoder running on the second computing device comprises: receiving, from a computing system that hosts the video conference, the data indicative of the internal encoder state of the encoder running on the second computing device.
 40. The one or more non-transitory computer-readable media of claim 37, wherein the internal encoder state comprises at least one of: one or more portions of one or more reference frames of video data associated with the video conference; or statistical data corresponding to at least one of the one or more portions of the one or more reference frames or the one or more reference frames. 